/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.cesupa.sgc.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author yuri
 */
@Entity
@NamedQueries({
    @NamedQuery(name="DadosPessoais.findAll", query="SELECT dp FROM DadosPessoais dp"),
    @NamedQuery(name="DadosPessoais.findById", query="SELECT dp FROM DadosPessoais dp WHERE dp.id = :id"),
    @NamedQuery(name="DadosPessoais.findByLoginUsuario", query="SELECT dp FROM DadosPessoais dp WHERE dp.usuario.login = :loginUsuario"),
    @NamedQuery(name="DadosPessoais.findLikeNome", query="SELECT dp FROM DadosPessoais dp WHERE dp.nome LIKE :nome")
})
public class DadosPessoais implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @OneToOne(mappedBy = "dadosPessoais")
    private Usuario usuario;
    @Column(nullable = false)
    private String nome;
    @Column(nullable = false)
    private Long cpf;
    @Column(nullable = false)
    private int rg;
    @ManyToOne(optional = false)
    private OrgaoExpeditor orgaoExpeditor;
    @Column(nullable = false)
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;
    @Column(nullable = false)
    private char sexo;
    @ManyToOne(optional = false)
    private EstadoCivil estadoCivil;
    @Column(nullable = false)
    private String nacionalidade;
    @Column(nullable = false)
    private String estadoNascimento;
    @Column(nullable = false)
    private String naturalidade;
    private Long carteiraTrabalho;
    @ManyToMany
    private List<Veiculo> veiculos = new ArrayList<Veiculo>();
    @Column(nullable = false)
    private String email;
    @ManyToMany
    private List<NecessidadeEspecial> necessidadesEspeciais = new ArrayList<NecessidadeEspecial>();
    private String nomePai;
    private String nomeMae;
    @Column(nullable = false)
    private String logradouro;
    @Column(nullable = false)
    private String numero;
    private String complemento;
    @Column(nullable = false)
    private String bairro;
    @Column(nullable = false)
    private int cep;
    @Column(nullable = false)
    private String pais;
    @Column(nullable = false)
    private String estado;
    @Column(nullable = false)
    private String cidade;
    private Long telefoneResidencial;
    private Long telefoneCelular;
    @ManyToMany
    private List<Turno> disponibilidade = new ArrayList<Turno>();
    @ManyToMany
    private List<Area> areasInteresse = new ArrayList<Area>();
    @ManyToMany
    private List<Formacao> formacoesAcademicas = new ArrayList<Formacao>();
    @ManyToMany
    private List<Idioma> idiomas = new ArrayList<Idioma>();
    @OneToMany(mappedBy = "dadosPessoais")
    private List<Experiencia> esperiencias = new ArrayList<Experiencia>();
    @Lob
    private String habilidades;


    @Override
    public int hashCode() {
        int hash = 0;
        hash += (getId() != null ? getId().hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof DadosPessoais)) {
            return false;
        }
        DadosPessoais other = (DadosPessoais) object;
        if ((this.getId() == null && other.getId() != null) || (this.getId() != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.cesupa.sgc.entity.DadosPessoais[id=" + getId() + "]";
    }

    /**
     * @return the id
     */
    public Long getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return the usuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the cpf
     */
    public Long getCpf() {
        return cpf;
    }

    /**
     * @param cpf the cpf to set
     */
    public void setCpf(Long cpf) {
        this.cpf = cpf;
    }

    /**
     * @return the rg
     */
    public int getRg() {
        return rg;
    }

    /**
     * @param rg the rg to set
     */
    public void setRg(int rg) {
        this.rg = rg;
    }

    /**
     * @return the orgaoExpeditor
     */
    public OrgaoExpeditor getOrgaoExpeditor() {
        return orgaoExpeditor;
    }

    /**
     * @param orgaoExpeditor the orgaoExpeditor to set
     */
    public void setOrgaoExpeditor(OrgaoExpeditor orgaoExpeditor) {
        this.orgaoExpeditor = orgaoExpeditor;
    }

    /**
     * @return the dataNascimento
     */
    public Date getDataNascimento() {
        return dataNascimento;
    }

    /**
     * @param dataNascimento the dataNascimento to set
     */
    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    /**
     * @return the sexo
     */
    public char getSexo() {
        return sexo;
    }

    /**
     * @param sexo the sexo to set
     */
    public void setSexo(char sexo) {
        this.sexo = sexo;
    }

    /**
     * @return the estadoCivil
     */
    public EstadoCivil getEstadoCivil() {
        return estadoCivil;
    }

    /**
     * @param estadoCivil the estadoCivil to set
     */
    public void setEstadoCivil(EstadoCivil estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    /**
     * @return the nacionalidade
     */
    public String getNacionalidade() {
        return nacionalidade;
    }

    /**
     * @param nacionalidade the nacionalidade to set
     */
    public void setNacionalidade(String nacionalidade) {
        this.nacionalidade = nacionalidade;
    }

    /**
     * @return the estadoNascimento
     */
    public String getEstadoNascimento() {
        return estadoNascimento;
    }

    /**
     * @param estadoNascimento the estadoNascimento to set
     */
    public void setEstadoNascimento(String estadoNascimento) {
        this.estadoNascimento = estadoNascimento;
    }

    /**
     * @return the naturalidade
     */
    public String getNaturalidade() {
        return naturalidade;
    }

    /**
     * @param naturalidade the naturalidade to set
     */
    public void setNaturalidade(String naturalidade) {
        this.naturalidade = naturalidade;
    }

    /**
     * @return the carteiraTrabalho
     */
    public Long getCarteiraTrabalho() {
        return carteiraTrabalho;
    }

    /**
     * @param carteiraTrabalho the carteiraTrabalho to set
     */
    public void setCarteiraTrabalho(Long carteiraTrabalho) {
        this.carteiraTrabalho = carteiraTrabalho;
    }

    /**
     * @return the veiculos
     */
    public List<Veiculo> getVeiculos() {
        return veiculos;
    }

    /**
     * @param veiculos the veiculos to set
     */
    public void setVeiculos(List<Veiculo> veiculos) {
        this.veiculos = veiculos;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the necessidadesEspeciais
     */
    public List<NecessidadeEspecial> getNecessidadesEspeciais() {
        return necessidadesEspeciais;
    }

    /**
     * @param necessidadesEspeciais the necessidadesEspeciais to set
     */
    public void setNecessidadesEspeciais(List<NecessidadeEspecial> necessidadesEspeciais) {
        this.necessidadesEspeciais = necessidadesEspeciais;
    }

    /**
     * @return the nomePai
     */
    public String getNomePai() {
        return nomePai;
    }

    /**
     * @param nomePai the nomePai to set
     */
    public void setNomePai(String nomePai) {
        this.nomePai = nomePai;
    }

    /**
     * @return the nomeMae
     */
    public String getNomeMae() {
        return nomeMae;
    }

    /**
     * @param nomeMae the nomeMae to set
     */
    public void setNomeMae(String nomeMae) {
        this.nomeMae = nomeMae;
    }

    /**
     * @return the logradouro
     */
    public String getLogradouro() {
        return logradouro;
    }

    /**
     * @param logradouro the logradouro to set
     */
    public void setLogradouro(String logradouro) {
        this.logradouro = logradouro;
    }

    /**
     * @return the numero
     */
    public String getNumero() {
        return numero;
    }

    /**
     * @param numero the numero to set
     */
    public void setNumero(String numero) {
        this.numero = numero;
    }

    /**
     * @return the complemento
     */
    public String getComplemento() {
        return complemento;
    }

    /**
     * @param complemento the complemento to set
     */
    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    /**
     * @return the bairro
     */
    public String getBairro() {
        return bairro;
    }

    /**
     * @param bairro the bairro to set
     */
    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    /**
     * @return the cep
     */
    public int getCep() {
        return cep;
    }

    /**
     * @param cep the cep to set
     */
    public void setCep(int cep) {
        this.cep = cep;
    }

    /**
     * @return the pais
     */
    public String getPais() {
        return pais;
    }

    /**
     * @param pais the pais to set
     */
    public void setPais(String pais) {
        this.pais = pais;
    }

    /**
     * @return the estado
     */
    public String getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(String estado) {
        this.estado = estado;
    }

    /**
     * @return the cidade
     */
    public String getCidade() {
        return cidade;
    }

    /**
     * @param cidade the cidade to set
     */
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    /**
     * @return the telefoneResidencial
     */
    public Long getTelefoneResidencial() {
        return telefoneResidencial;
    }

    /**
     * @param telefoneResidencial the telefoneResidencial to set
     */
    public void setTelefoneResidencial(Long telefoneResidencial) {
        this.telefoneResidencial = telefoneResidencial;
    }

    /**
     * @return the telefoneCelular
     */
    public Long getTelefoneCelular() {
        return telefoneCelular;
    }

    /**
     * @param telefoneCelular the telefoneCelular to set
     */
    public void setTelefoneCelular(Long telefoneCelular) {
        this.telefoneCelular = telefoneCelular;
    }

    /**
     * @return the disponibilidade
     */
    public List<Turno> getDisponibilidade() {
        return disponibilidade;
    }

    /**
     * @param disponibilidade the disponibilidade to set
     */
    public void setDisponibilidade(List<Turno> disponibilidade) {
        this.disponibilidade = disponibilidade;
    }

    /**
     * @return the areasInteresse
     */
    public List<Area> getAreasInteresse() {
        return areasInteresse;
    }

    /**
     * @param areasInteresse the areasInteresse to set
     */
    public void setAreasInteresse(List<Area> areasInteresse) {
        this.areasInteresse = areasInteresse;
    }

    /**
     * @return the formacoesAcademicas
     */
    public List<Formacao> getFormacoesAcademicas() {
        return formacoesAcademicas;
    }

    /**
     * @param formacoesAcademicas the formacoesAcademicas to set
     */
    public void setFormacoesAcademicas(List<Formacao> formacoesAcademicas) {
        this.formacoesAcademicas = formacoesAcademicas;
    }

    /**
     * @return the idiomas
     */
    public List<Idioma> getIdiomas() {
        return idiomas;
    }

    /**
     * @param idiomas the idiomas to set
     */
    public void setIdiomas(List<Idioma> idiomas) {
        this.idiomas = idiomas;
    }

    /**
     * @return the esperiencias
     */
    public List<Experiencia> getEsperiencias() {
        return esperiencias;
    }

    /**
     * @param esperiencias the esperiencias to set
     */
    public void setEsperiencias(List<Experiencia> esperiencias) {
        this.esperiencias = esperiencias;
    }

    /**
     * @return the habilidades
     */
    public String getHabilidades() {
        return habilidades;
    }

    /**
     * @param habilidades the habilidades to set
     */
    public void setHabilidades(String habilidades) {
        this.habilidades = habilidades;
    }
}
